import Cookies from 'js-cookie'

import defaultSettings from '@/settings'

const keyPrefix = defaultSettings.keyPrefix;

/**
 * 数据存储
 * 使用sessionStorage进行存储，浏览器关闭失效，刷新不失效
 * 用于存储用户信息等全局数据
 * @param key
 * @param val
 */
export function setData(key, val) {
  if(typeof val === 'object'){
    val = JSON.stringify(val);
  }
  sessionStorage.setItem(keyPrefix + key, val)
}

export function getData(key) {
  return sessionStorage.getItem(keyPrefix + key)
}

export function removeData(key) {
  sessionStorage.removeItem(keyPrefix + key)
}

/**
 * 本地数据存储
 * 使用localStorage进行存储，永久存储
 * 用于存储用户信息等全局数据
 * @param key
 * @param val
 */
export function setLocalData(key, val) {
  if(typeof val === 'object'){
    val = JSON.stringify(val);
  }
  localStorage.setItem(keyPrefix + key, val)
}

export function getLocalData(key) {
  return localStorage.getItem(keyPrefix + key)
}

export function removeLocalData(key) {
  localStorage.removeItem(keyPrefix + key)
}

/**
 * 通过临时存储变量
 * 使用场景，独立编辑页面，在编辑完成后跳转回到列表页面保持选中刚刚编辑的条目
 * 使用cookie并设置一个较短的过期时间来实现，不使用url传参，以保持url统一
 * @param name
 * @param val
 * @param expiresSecond 有效时间，以秒为单位，默认10s
 */
export function setTmpCache(name, val, expiresSecond = 10) {
  let time = new Date(new Date().getTime() + expiresSecond * 1000);
  Cookies.set(keyPrefix + name, val, {expires: time});
}

/**
 * 获取保存的临时变量
 * @param name
 * @returns {*}
 */
export function getTmpCache(name) {
  let val = Cookies.get(keyPrefix + name);
  deleteTmpCache(name);
  return val
}

/**
 * 清空对应cookie
 * @param name
 */
export function deleteTmpCache(name) {
  Cookies.remove(keyPrefix + name);
}
